package com.reportes;

import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;

import org.achartengine.ChartFactory;
import org.achartengine.GraphicalView;
import org.achartengine.chart.BarChart.Type;
import org.achartengine.model.SeriesSelection;
import org.achartengine.model.XYMultipleSeriesDataset;

import clasesGraficas.VentasN1;
import clasesGraficas.VentasN2;
import clasesGraficas.VentasN3;

import android.app.Activity;
import android.app.DatePickerDialog;
import android.app.Dialog;
import android.graphics.Color;
import android.graphics.PorterDuff;
import android.graphics.PorterDuffColorFilter;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup.LayoutParams;
import android.widget.Button;
import android.widget.DatePicker;
import android.widget.LinearLayout;
import android.widget.Toast;

public class VentasGenerales extends Activity {

	//### Graficar ###/
	GraphicalView mChartView = null;
	int[] anios = null;
	int[] meses = null;
	int[] ventasAnio = null;
	int[] ventasMes = null;
	String[] datos = null;
	String tituloGrafica = "";
	LinearLayout layoutGrafica = null;
	boolean anual = false;
	//################
	
	public String titulo = "";
	public int flagTiempo = 0; // 1=mes && 2=trimenstre && 3=anno
	public int flagLima = 0;
	public int flagProvincia = 0;
	public int flagNivel=0; 
	
	private Button pickDateInicio;
    private int anhoInicio;
    private int mesInicio;
    private int diaInicio;
    
    private Button pickDateFin;
    private int anhoFin;
    private int mesFin;
    private int diaFin;
    
    static final int DATE_DIALOG_Inicial = 0;
    static final int DATE_DIALOG_Final = 1;
	
	/**
	 * @see android.app.Activity#onCreate(Bundle)
	 */
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		
		super.onCreate(savedInstanceState);
		setContentView(R.layout.ventas);
		
		pickDateInicio = (Button) findViewById(R.id.ButtonInicio);

		pickDateInicio.setOnClickListener(new View.OnClickListener() {
		            public void onClick(View v) {
		                showDialog(DATE_DIALOG_Inicial);
		            }
		        });
		        
		final Calendar c = Calendar.getInstance();
		anhoInicio = c.get(Calendar.YEAR);
		mesInicio = c.get(Calendar.MONTH);
		diaInicio = c.get(Calendar.DAY_OF_MONTH);
		
		pickDateFin = (Button) findViewById(R.id.ButtonFin);

		pickDateFin.setOnClickListener(new View.OnClickListener() {
		            public void onClick(View v) {
		                showDialog(DATE_DIALOG_Final);
		            }
		        });
		        
		anhoFin = c.get(Calendar.YEAR);
		mesFin = c.get(Calendar.MONTH);
		diaFin = c.get(Calendar.DAY_OF_MONTH);
	}
	
	
	protected Dialog onCreateDialog(int id) {
		   switch (id) {
		   case DATE_DIALOG_Inicial:
		    DatePickerDialog dialogoInicio =new DatePickerDialog(this,
		                    mDateSetListenerInicio, anhoInicio, mesInicio, diaInicio);
		    
		    dialogoInicio.getDatePicker();
			   
		    return dialogoInicio;
		    
		   case DATE_DIALOG_Final:
			    DatePickerDialog dialogoFin =new DatePickerDialog(this,
			                    mDateSetListenerFin, anhoFin, mesFin, diaFin);
			    
			    dialogoFin.getDatePicker();
		   
		    return dialogoFin;
		   }
		   return null;
	}
	
	private DatePickerDialog.OnDateSetListener mDateSetListenerInicio = new DatePickerDialog.OnDateSetListener() {
        public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
        	anhoInicio = year;
        	mesInicio = monthOfYear;
        	diaInicio = dayOfMonth;  
        }
	};
	
	private DatePickerDialog.OnDateSetListener mDateSetListenerFin = new DatePickerDialog.OnDateSetListener() {
        public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
        	anhoFin = year;
        	mesFin = monthOfYear;
        	diaFin = dayOfMonth;           
        }
	};
	
	public void GenerarReporte(View view){
		
		int numeroInicial = anhoInicio*10000+mesInicio*100+diaInicio;
		int numeroFinal = anhoFin*10000+mesFin*100+diaFin;
		
		if (( ( flagProvincia == 0 && flagLima==0) || flagTiempo == 0)== false) {
		
			if(numeroFinal>=numeroInicial){
				
				int mesinicialnumero = (mesInicio) % 4 ;
				int mesfinalnumero = (mesFin) % 4 ;
				//Toast.makeText(this, mesinicialnumero+"", Toast.LENGTH_LONG).show();
				//Toast.makeText(this, mesfinalnumero+"", Toast.LENGTH_LONG).show();
				
				if((mesinicialnumero!=0 || mesfinalnumero!=0) && flagTiempo==2){
					
					Toast.makeText(this, "Los meses no coinciden para el trimenstre", Toast.LENGTH_LONG).show();
					
				}else{
					
					/*public int flagTiempo = 0            1=mes && 2=trimenstre && 3=anho
					 * 
					 * 
					 * En este bloque se encuentran las llamadas
					 * 
					 * 
					 * (En este punto ya paso con todas las validaciones es decir esta totalmente habilitado)
					 * 
					*/
					
					
					if (flagNivel==0){
						//Aqui va la llamada a la funcion linea normal y refrescar el layout
						//Datos: Esto esta harcodeado por ahora
						this.anios = new int[] {2008, 2009, 2010, 2011};
						this.meses = new int[] {3,4,5,6};
						this.ventasMes = new int[] {5000, 6000, 6000, 10000};
						this.ventasAnio = new int[] {20000, 40000, 30000, 35000};
						this.datos = new String [] {"Datos 1", "Datos 2", "Datos 3", "Datos 4"};
						
						this.tituloGrafica = "Ventas de la empresa 2008-2011";
						VentasN1 ventasGenerales = new VentasN1();
						
						if (this.anual){							
							ventasGenerales.ejecutar(anios, ventasAnio, tituloGrafica, 1);
						}
						else{
							this.tituloGrafica = "Ventas de la empresa Marzo-Junio 2011";
							ventasGenerales.ejecutar(meses, ventasMes, tituloGrafica, 2);
						}
											
						this.layoutGrafica = (LinearLayout)findViewById(R.id.idpanelgraficoventa);
						this.mChartView = ChartFactory.getLineChartView(this,ventasGenerales.getDataset(), 
								ventasGenerales.getmRenderer());
						layoutGrafica.removeAllViews();
					    layoutGrafica.addView(mChartView, new LayoutParams(LayoutParams.FILL_PARENT,
						               LayoutParams.FILL_PARENT));
						
						Toast.makeText(this, "Se genera el reporte normal", Toast.LENGTH_LONG).show();
						//****
						mChartView.setOnClickListener(new View.OnClickListener() {
					        @Override
					        public void onClick(View v) {
					          SeriesSelection seriesSelection = mChartView.getCurrentSeriesAndPoint();
					          double[] xy = mChartView.toRealPoint(0);
					          if (seriesSelection == null) {} 
					          else {					        	  
					        	  if (anual)
					        		  Toast.makeText(
					        				  VentasGenerales.this,
					        			  		"Los datos del punto es: " + getDataXY(datos, anios, ventasAnio, (int)seriesSelection.getXValue(), 
					        			  				(int)seriesSelection.getValue()), Toast.LENGTH_SHORT).show();
					        	  else
					        		  Toast.makeText(
						        			  VentasGenerales.this,
						        			  	"Los datos del punto es: " + getDataXY(datos, anios, ventasMes, (int)seriesSelection.getXValue(), 
						        			  			(int)seriesSelection.getValue()), Toast.LENGTH_SHORT).show();
					          }
					        }
					      });
					}
					
					if (flagNivel==1){
						//Aqui va la llamada a la funcion con barra para Ventas por Promotor	
						Toast.makeText(this, "Se genera el reporte por Promotor	", Toast.LENGTH_LONG).show();
					}
					if (flagNivel==2){
						double[] e1 = {1000, 1200, 1000, 1200};
						double [] e2 = {400, 600, 800, 1000};
						double [] e3 = {200, 400, 700, 600};
						double [] e4 = {100, 200, 100, 500};
						List<double[]> eventos = new ArrayList<double[]>();
						eventos.add(e1);
						eventos.add(e2);
						eventos.add(e3);
						eventos.add(e4);
						
						String[] titulos = {"Evento 1", "Evento 2", "Evento 3", "Evento 4"};
						
						VentasN2 ventasTipoEvento = new VentasN2();
						ventasTipoEvento.ejecutar(eventos, titulos);
						
						this.layoutGrafica = (LinearLayout)findViewById(R.id.idpanelgraficoventa);
						this.mChartView = ChartFactory.getBarChartView(this,ventasTipoEvento.getDataset(), 
								ventasTipoEvento.getmRenderer(),Type.STACKED);
						layoutGrafica.removeAllViews();
					    layoutGrafica.addView(mChartView, new LayoutParams(LayoutParams.FILL_PARENT,
						               LayoutParams.FILL_PARENT));
						
						Toast.makeText(this, "Se genera el reporte por Tipo de Evento", Toast.LENGTH_LONG).show();
						
						this.mChartView.setOnClickListener(new View.OnClickListener() {
							@Override
							public void onClick(View arg0) {
								SeriesSelection seriesSelection = mChartView.getCurrentSeriesAndPoint();
								if (seriesSelection == null) {} 
						        else{
						        	int[] valoresPie = new int[4];
						        	//int x= (int)seriesSelection.getXValue();
									valoresPie[0] = 1000;
									valoresPie[1] = 400;
									valoresPie[2] = 200;
									valoresPie[3] = 100;
									
									VentasN3 ventasNivel3 = new VentasN3();
									ventasNivel3.ejecutar(valoresPie);
									
									layoutGrafica = (LinearLayout)findViewById(R.id.idpanelgraficoventa);
									mChartView = ChartFactory.getPieChartView(VentasGenerales.this, ventasNivel3.series, ventasNivel3.render);
									layoutGrafica.removeAllViews();
								    layoutGrafica.addView(mChartView, new LayoutParams(LayoutParams.FILL_PARENT,
									               LayoutParams.FILL_PARENT));
						        }
							}
						});

					}
					
					if (flagNivel==3){
						//Aqui va la llamada a la funcion con barra para Ventas por Sub Tipo de Evento	
						Toast.makeText(this, "Se genera el reporte por Sub Tipo de Evento", Toast.LENGTH_LONG).show();
					}
					if (flagNivel==4){
						//Aqui va la llamada a la funcion con barra para Ventas por Canal
						Toast.makeText(this, "Se genera el reporte por Canal", Toast.LENGTH_LONG).show();
					}
					if (flagNivel==5){
						//Aqui va la llamada a la funcion con barra para Ventas por Genero
						Toast.makeText(this, "Se genera el reporte por Genero", Toast.LENGTH_LONG).show();
					}
					
				}
				
			}
			
			else{
				
				Toast.makeText(this, "La Fecha Final no puede ser menor a la Fecha Inicial", Toast.LENGTH_LONG).show();
			}
		}	
		else{
			
			Toast.makeText(this, "Debe seleccionar el periodo y la ubicacion", Toast.LENGTH_LONG).show();
		}
		
	}
	
	public void establecerColorTiempo(View view){
		
		
		Button buttonMensuales = (Button) findViewById(R.id.buttonMensuales);
		Button buttonAnuales = (Button) findViewById(R.id.buttonAnuales);
		Button buttonTrimestrales = (Button) findViewById(R.id.buttonTrimestrales);
	
		if (buttonMensuales.isPressed()){
			
			anual = false;
			Drawable d1 = buttonMensuales.getBackground();
            PorterDuffColorFilter filter = new PorterDuffColorFilter(Color.GREEN, PorterDuff.Mode.SRC_ATOP);
            d1.setColorFilter(filter);
			
			
			Drawable d2 = buttonAnuales.getBackground();
            findViewById(R.id.buttonAnuales).invalidateDrawable(d2);
            d2.clearColorFilter();
			
            Drawable d3 = buttonTrimestrales.getBackground();
            findViewById(R.id.buttonTrimestrales).invalidateDrawable(d3);
            d3.clearColorFilter();
            
			flagTiempo=1;
			
			
		}
		if (buttonAnuales.isPressed()){
			
			anual = true;
			Drawable d1 = buttonAnuales.getBackground();
            PorterDuffColorFilter filter = new PorterDuffColorFilter(Color.GREEN, PorterDuff.Mode.SRC_ATOP);
            d1.setColorFilter(filter);

			
			Drawable d2 = buttonMensuales.getBackground();
            findViewById(R.id.buttonMensuales).invalidateDrawable(d2);
            d2.clearColorFilter();
			
            Drawable d3 = buttonTrimestrales.getBackground();
            findViewById(R.id.buttonTrimestrales).invalidateDrawable(d3);
            d3.clearColorFilter();
            
			flagTiempo=3;
		
		}
		if (buttonTrimestrales.isPressed()) {
			
			anual = false;
			Drawable d1 = buttonTrimestrales.getBackground();
            PorterDuffColorFilter filter = new PorterDuffColorFilter(Color.GREEN, PorterDuff.Mode.SRC_ATOP);
            d1.setColorFilter(filter);

			
			Drawable d2 = buttonMensuales.getBackground();
            findViewById(R.id.buttonMensuales).invalidateDrawable(d2);
            d2.clearColorFilter();
			
            Drawable d3 = buttonAnuales.getBackground();
            findViewById(R.id.buttonAnuales).invalidateDrawable(d3);
            d3.clearColorFilter();
            
			flagTiempo=2;
			
		}
		
		
	}
	
	
	public void establecerColorUbicacion(View view){
		

		Button buttonLima = (Button) findViewById(R.id.buttonLima);
		Button buttonProvincia = (Button) findViewById(R.id.buttonProvincia);
		
		
        
        if (buttonLima.isPressed()){
        	if (flagLima == 0) {
        		Drawable d1 = buttonLima.getBackground();
                PorterDuffColorFilter filter = new PorterDuffColorFilter(Color.GREEN, PorterDuff.Mode.SRC_ATOP);
                d1.setColorFilter(filter);

    			flagLima=1;
        	}
        	else{
        		Drawable d2 = buttonProvincia.getBackground();
                findViewById(R.id.buttonLima).invalidateDrawable(d2);
                d2.clearColorFilter();
                flagLima=0;
        	}
        	

		}
		if (buttonProvincia.isPressed()){
			
			if(flagProvincia==0){
				Drawable d1 = buttonProvincia.getBackground();
	            PorterDuffColorFilter filter = new PorterDuffColorFilter(Color.GREEN, PorterDuff.Mode.SRC_ATOP);
	            d1.setColorFilter(filter);

				flagProvincia=1;
			}
			else{
				Drawable d2 = buttonLima.getBackground();
	            findViewById(R.id.buttonProvincia).invalidateDrawable(d2);
	            d2.clearColorFilter();
	            flagProvincia=0;
			}

		}
        
		
	}
	
	
	public void establecerSegundoNivel(View view){
		
		Button buttonCanal = (Button) findViewById(R.id.buttonCanal);
		Button buttonGenero = (Button) findViewById(R.id.buttonGenero);
		Button buttonPromotor = (Button) findViewById(R.id.buttonPromotor);
		Button buttonSubTipoEvento = (Button) findViewById(R.id.buttonSubTipoEvento);
		Button buttonTipoEvento = (Button) findViewById(R.id.buttonTipoEvento);
	
		if (buttonCanal.isPressed()){
			
			if (flagNivel == 4) {
        		
				Drawable d1 = buttonCanal.getBackground();
	            findViewById(R.id.buttonCanal).invalidateDrawable(d1);
	            d1.clearColorFilter();

	            flagNivel=0;
        	}
			else{
			
			
				Drawable d1 = buttonCanal.getBackground();
	            PorterDuffColorFilter filter = new PorterDuffColorFilter(Color.GREEN, PorterDuff.Mode.SRC_ATOP);
	            d1.setColorFilter(filter);
				
				
				Drawable d2 = buttonGenero.getBackground();
	            findViewById(R.id.buttonGenero).invalidateDrawable(d2);
	            d2.clearColorFilter();
				
	            Drawable d3 = buttonPromotor.getBackground();
	            findViewById(R.id.buttonPromotor).invalidateDrawable(d3);
	            d3.clearColorFilter();
	            
	            Drawable d4 = buttonSubTipoEvento.getBackground();
	            findViewById(R.id.buttonSubTipoEvento).invalidateDrawable(d4);
	            d4.clearColorFilter();
				
	            Drawable d5 = buttonTipoEvento.getBackground();
	            findViewById(R.id.buttonTipoEvento).invalidateDrawable(d5);
	            d5.clearColorFilter();
	            
				flagNivel=4;
			}
			
		}
		if (buttonGenero.isPressed()){
			
			if (flagNivel == 5) {
        		
				Drawable d1 = buttonGenero.getBackground();
	            findViewById(R.id.buttonGenero).invalidateDrawable(d1);
	            d1.clearColorFilter();

	            flagNivel=0;
        	}
			else{
			
				Drawable d1 = buttonGenero.getBackground();
	            PorterDuffColorFilter filter = new PorterDuffColorFilter(Color.GREEN, PorterDuff.Mode.SRC_ATOP);
	            d1.setColorFilter(filter);
				
				
				Drawable d2 = buttonCanal.getBackground();
	            findViewById(R.id.buttonCanal).invalidateDrawable(d2);
	            d2.clearColorFilter();
				
	            Drawable d3 = buttonPromotor.getBackground();
	            findViewById(R.id.buttonPromotor).invalidateDrawable(d3);
	            d3.clearColorFilter();
	            
	            Drawable d4 = buttonSubTipoEvento.getBackground();
	            findViewById(R.id.buttonSubTipoEvento).invalidateDrawable(d4);
	            d4.clearColorFilter();
				
	            Drawable d5 = buttonTipoEvento.getBackground();
	            findViewById(R.id.buttonTipoEvento).invalidateDrawable(d5);
	            d5.clearColorFilter();
	            
				flagNivel=5;
			}
		
		}
		if (buttonPromotor.isPressed()) {
			
			if (flagNivel == 1) {
        		
				Drawable d1 = buttonPromotor.getBackground();
	            findViewById(R.id.buttonPromotor).invalidateDrawable(d1);
	            d1.clearColorFilter();

	            flagNivel=0;
        	}
			else{
			
				Drawable d1 = buttonPromotor.getBackground();
	            PorterDuffColorFilter filter = new PorterDuffColorFilter(Color.GREEN, PorterDuff.Mode.SRC_ATOP);
	            d1.setColorFilter(filter);
				
				
				Drawable d2 = buttonCanal.getBackground();
	            findViewById(R.id.buttonCanal).invalidateDrawable(d2);
	            d2.clearColorFilter();
				
	            Drawable d3 = buttonGenero.getBackground();
	            findViewById(R.id.buttonGenero).invalidateDrawable(d3);
	            d3.clearColorFilter();
	            
	            Drawable d4 = buttonSubTipoEvento.getBackground();
	            findViewById(R.id.buttonSubTipoEvento).invalidateDrawable(d4);
	            d4.clearColorFilter();
				
	            Drawable d5 = buttonTipoEvento.getBackground();
	            findViewById(R.id.buttonTipoEvento).invalidateDrawable(d5);
	            d5.clearColorFilter();
	            
				flagNivel=1;
			}
			
		}
		
		if (buttonTipoEvento.isPressed()) {
			
			if (flagNivel == 2) {
        		
				Drawable d1 = buttonTipoEvento.getBackground();
	            findViewById(R.id.buttonTipoEvento).invalidateDrawable(d1);
	            d1.clearColorFilter();

	            flagNivel=0;
        	}
			else{
			
			
				Drawable d1 = buttonTipoEvento.getBackground();
	            PorterDuffColorFilter filter = new PorterDuffColorFilter(Color.GREEN, PorterDuff.Mode.SRC_ATOP);
	            d1.setColorFilter(filter);
				
				
				Drawable d2 = buttonCanal.getBackground();
	            findViewById(R.id.buttonCanal).invalidateDrawable(d2);
	            d2.clearColorFilter();
				
	            Drawable d3 = buttonGenero.getBackground();
	            findViewById(R.id.buttonGenero).invalidateDrawable(d3);
	            d3.clearColorFilter();
	            
	            Drawable d4 = buttonSubTipoEvento.getBackground();
	            findViewById(R.id.buttonSubTipoEvento).invalidateDrawable(d4);
	            d4.clearColorFilter();
				
	            Drawable d5 = buttonPromotor.getBackground();
	            findViewById(R.id.buttonPromotor).invalidateDrawable(d5);
	            d5.clearColorFilter();
	            
				flagNivel=2;
			}
			
		}
		
		if (buttonSubTipoEvento.isPressed()) {
			
			if (flagNivel == 3) {
        		
				Drawable d1 = buttonSubTipoEvento.getBackground();
	            findViewById(R.id.buttonSubTipoEvento).invalidateDrawable(d1);
	            d1.clearColorFilter();

	            flagNivel=0;
        	}
			else{
			
				Drawable d1 = buttonSubTipoEvento.getBackground();
	            PorterDuffColorFilter filter = new PorterDuffColorFilter(Color.GREEN, PorterDuff.Mode.SRC_ATOP);
	            d1.setColorFilter(filter);
				
				
				Drawable d2 = buttonCanal.getBackground();
	            findViewById(R.id.buttonCanal).invalidateDrawable(d2);
	            d2.clearColorFilter();
				
	            Drawable d3 = buttonGenero.getBackground();
	            findViewById(R.id.buttonGenero).invalidateDrawable(d3);
	            d3.clearColorFilter();
	            
	            Drawable d4 = buttonTipoEvento.getBackground();
	            findViewById(R.id.buttonTipoEvento).invalidateDrawable(d4);
	            d4.clearColorFilter();
				
	            Drawable d5 = buttonPromotor.getBackground();
	            findViewById(R.id.buttonPromotor).invalidateDrawable(d5);
	            d5.clearColorFilter();
            
			flagNivel=3;
			
			}
		
		}
	}
	public void anHandler(View view){
		Venta_General venta = new Venta_General();

		venta.obtenerAnuales(2010,2012);

		//venta.obtenerAnuales();

		GraphicalView mChartview;
		LinearLayout layout = (LinearLayout) findViewById(R.id.idpanelgraficoventa);
		mChartview = ChartFactory.getLineChartView(this, venta.getDataset(), venta.getRenders() );
		layout.removeAllViews();
		layout.addView(mChartview, new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));
	}
	
	public void mesHandler(View view){
		Venta_General venta = new Venta_General();
		venta.obtenerMensuales();
		GraphicalView mChartview;
		LinearLayout layout = (LinearLayout) findViewById(R.id.idpanelgraficoventa);
		mChartview = ChartFactory.getLineChartView(this, venta.getDataset(), venta.getRenders() );
		layout.removeAllViews();
		layout.addView(mChartview, new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));
	}
	
	public void trimHandler(View view){
		Venta_General venta = new Venta_General();
		venta.obtenerTrimestrales();
		GraphicalView mChartview;
		LinearLayout layout = (LinearLayout) findViewById(R.id.idpanelgraficoventa);
		mChartview = ChartFactory.getLineChartView(this, venta.getDataset(), venta.getRenders() );
		layout.removeAllViews();
		layout.addView(mChartview, new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));
	}
	
	public String getDataXY(String[] data, int[] xValues, int[] yValues, int x, int y){
    	int indice = 0;
    	
    	for(int i=0;i<xValues.length;i++){
    		indice= i;
    		if (xValues[i] == x && yValues[i] == y)
    			break;
    	}
    	
    	return data[indice];
    }
	
		
}
